package com.hmdp.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * `MybatisConfig` 类是一个配置类，用于在 Spring 应用程序中设置和配置 MyBatis-Plus 拦截器。
 * 具体来说，它配置了一个分页拦截器，用于处理 MySQL 数据库的分页操作。
 * <p>
 * 该类使用 `@Configuration` 注解进行标记，表明它为 Spring 应用上下文提供 Bean 定义。
 * `@Bean` 注解用于定义一个类型为 `MybatisPlusInterceptor` 的 Bean，这是 MyBatis-Plus 的核心组件之一，
 * 用于向 MyBatis 框架添加自定义拦截器。
 * <p>
 * `mybatisPlusInterceptor` 方法创建并配置了一个 `MybatisPlusInterceptor` 实例。
 * 它添加了一个 `PaginationInnerInterceptor` 来处理分页逻辑，并通过指定 `DbType.MYSQL` 来适配 MySQL 数据库。
 * 该拦截器负责拦截 SQL 查询并自动应用分页逻辑，例如在 SQL 语句中添加 `LIMIT` 和 `OFFSET` 子句。
 * <p>
 * 使用方法：
 * - 该配置类会在应用程序启动时由 Spring 框架自动加载。
 * - 配置的 `MybatisPlusInterceptor` Bean 会被 MyBatis-Plus 用于在应用程序的数据访问层启用分页功能。
 * <p>
 * 注意事项：
 * - 确保 `PaginationInnerInterceptor` 中指定的 `DbType` 与所使用的数据库类型匹配。
 * - 如果需要，可以根据应用程序的需求向 `MybatisPlusInterceptor` 实例添加其他拦截器。
 */
@Configuration
public class MybatisConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}
